ফাইল হ্যান্ডলিং হলো এমন একটি প্রক্রিয়া যার মাধ্যমে C++ প্রোগ্রামিং ভাষায় প্রোগ্রাম থেকে বিভিন্ন ধরনের ফাইল তৈরি, পড়া, লেখা, এবং মুছে ফেলা সম্ভব হয়। ফাইল হ্যান্ডলিং ব্যবহার করে আমরা ডেটা সংরক্ষণ এবং রিট্রিভ করতে পারি, যা প্রোগ্রামের আউটপুট সংরক্ষণ বা ইনপুট হিসেবে ব্যবহার করার জন্য অত্যন্ত কার্যকর।
C++ এ ফাইল হ্যান্ডলিং করার জন্য fstream লাইব্রেরি ব্যবহৃত হয়, যা তিনটি ক্লাস সরবরাহ করে:
ফাইল খোলার জন্য open()
ফাংশন বা কনস্ট্রাক্টর ব্যবহার করা হয়। ফাইল খোলার সময় বিভিন্ন মোড ব্যবহার করা যায়:
cpp
Copy code
#include <iostream>
#include <fstream> // fstream লাইব্রেরি অন্তর্ভুক্ত
using namespace std;
int main() {
ofstream outFile; // ofstream অবজেক্ট তৈরি
outFile.open("example.txt"); // ফাইল খোলা
if (outFile.is_open()) {
outFile << "Hello, World!" << endl; // ফাইলে লেখা
outFile << "This is a file handling example." << endl;
outFile.close(); // ফাইল বন্ধ করা
cout << "Data written to file successfully!" << endl;
} else {
cout << "Failed to open the file." << endl;
}
return 0;
}
বর্ণনা:
example.txt
নামে একটি ফাইল খোলা হয়েছে ios::out
মোডে (লেখার জন্য)।outFile
স্ট্রিম অবজেক্ট ব্যবহার করে ফাইলে দুটি লাইন লেখা হয়েছে এবং শেষে close()
ফাংশন ব্যবহার করে ফাইলটি বন্ধ করা হয়েছে।#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream inFile; // ifstream অবজেক্ট তৈরি
inFile.open("example.txt"); // ফাইল খোলা
if (inFile.is_open()) {
string line;
while (getline(inFile, line)) { // ফাইল থেকে এক লাইন করে পড়া
cout << line << endl;
}
inFile.close(); // ফাইল বন্ধ করা
} else {
cout << "Failed to open the file." << endl;
}
return 0;
}
বর্ণনা:
example.txt
ফাইলটি ios::in
মোডে খোলা হয়েছে (পড়ার জন্য)।getline()
ফাংশন ব্যবহার করে ফাইল থেকে এক লাইন করে পড়া হয়েছে এবং কনসোলে আউটপুট হিসেবে প্রদর্শন করা হয়েছে।ফাইলের মোড নির্ধারণ করে ফাইলকে অ্যাপেন্ড মোডে খুললে ফাইলের পূর্বের ডেটা মুছে ফেলা হয় না বরং নতুন ডেটা সংযুক্ত করা হয়।
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream outFile("example.txt", ios::app); // অ্যাপেন্ড মোডে ফাইল খোলা
if (outFile.is_open()) {
outFile << "Appending new line to the file." << endl;
outFile.close();
cout << "Data appended to file successfully!" << endl;
} else {
cout << "Failed to open the file." << endl;
}
return 0;
}
বর্ণনা:
example.txt
ফাইল ios::app
মোডে খোলা হয়েছে, যার ফলে নতুন ডেটা আগের ডেটার সাথে যোগ করা হয়েছে।বাইনারি মোডে ফাইল হ্যান্ডলিং সাধারণত বাইনারি ডেটা (যেমন ইমেজ, ভিডিও, ইত্যাদি) পড়া বা লেখার ক্ষেত্রে ব্যবহৃত হয়।
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream outFile("binaryfile.bin", ios::binary);
int num = 100;
if (outFile.is_open()) {
outFile.write(reinterpret_cast<char*>(&num), sizeof(num)); // বাইনারি ফর্ম্যাটে লেখা
outFile.close();
}
ifstream inFile("binaryfile.bin", ios::binary);
int readNum = 0;
if (inFile.is_open()) {
inFile.read(reinterpret_cast<char*>(&readNum), sizeof(readNum)); // বাইনারি ফর্ম্যাটে পড়া
inFile.close();
cout << "Number read from binary file: " << readNum << endl;
}
return 0;
}
বর্ণনা:
binaryfile.bin
নামে একটি ফাইল বাইনারি মোডে খোলা হয়েছে এবং num
ভ্যারিয়েবলের মান ফাইলে লেখা হয়েছে।readNum
ভ্যারিয়েবলে সংরক্ষিত করা হয়েছে।ios::in
, ios::out
, ios::app
, ios::binary
ইত্যাদি) বিভিন্ন অপারেশন করা যায়।ফাইল হ্যান্ডলিং প্রোগ্রামিংয়ে গুরুত্বপূর্ণ ভূমিকা পালন করে, কারণ এটি প্রোগ্রামের ডেটা সংরক্ষণ এবং রিট্রিভ করতে সহায়ক।
C++ এ ফাইল খোলা, পড়া এবং লেখা ফাইল পরিচালনার মৌলিক কাজগুলোর মধ্যে অন্তর্ভুক্ত। C++ এ ফাইল পরিচালনা করতে fstream
লাইব্রেরি ব্যবহার করা হয়, যা ifstream
(ইনপুট ফাইল স্ট্রিম), ofstream
(আউটপুট ফাইল স্ট্রিম), এবং fstream
(ইনপুট ও আউটপুট উভয়) ক্লাসের মাধ্যমে ফাইল খোলা, পড়া এবং লেখার কাজটি সম্পন্ন করে।
ফাইল খোলার জন্য fstream
, ifstream
বা ofstream
ক্লাস ব্যবহার করে অবজেক্ট তৈরি করা হয় এবং ফাইলের নাম পাস করে সেই ফাইল খোলা যায়। ফাইল খোলার বিভিন্ন মোড রয়েছে, যেমন:
ifstream
এ)ofstream
এ)ফাইলে লেখার জন্য ofstream
বা fstream
ব্যবহার করা হয় এবং <<
অপারেটর ব্যবহার করে ডেটা ফাইলে লেখা হয়।
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream outFile("example.txt"); // ফাইল খোলা লেখার জন্য
if (outFile.is_open()) {
outFile << "Hello, World!" << endl;
outFile << "This is a test file." << endl;
outFile.close(); // ফাইল বন্ধ করা
cout << "Data written to file successfully." << endl;
} else {
cout << "Unable to open file for writing." << endl;
}
return 0;
}
বর্ণনা:
"example.txt"
নামে একটি ফাইল খোলা হয়েছে লেখার জন্য।outFile << "Hello, World!" << endl;
দিয়ে ডেটা ফাইলে লেখা হয়েছে।outFile.close();
দিয়ে ফাইল বন্ধ করা হয়েছে।ফাইল থেকে পড়ার জন্য ifstream
বা fstream
ব্যবহার করা হয় এবং >>
অপারেটর বা getline()
ফাংশন ব্যবহার করে ডেটা পড়া হয়।
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream inFile("example.txt"); // ফাইল খোলা পড়ার জন্য
string line;
if (inFile.is_open()) {
while (getline(inFile, line)) { // প্রতিটি লাইন পড়া
cout << line << endl;
}
inFile.close(); // ফাইল বন্ধ করা
} else {
cout << "Unable to open file for reading." << endl;
}
return 0;
}
বর্ণনা:
"example.txt"
ফাইলটি পড়ার জন্য খোলা হয়েছে।getline(inFile, line);
দিয়ে প্রতিটি লাইন পড়ে line
স্ট্রিংয়ে সংরক্ষণ করা হয়েছে এবং তারপর cout
দিয়ে আউটপুটে প্রদর্শন করা হয়েছে।inFile.close();
দিয়ে ফাইল বন্ধ করা হয়েছে।ফাইলে অ্যাপেন্ড মোডে লেখা হলে আগের ডেটা মুছে না ফেলে নতুন ডেটা যোগ করা যায়।
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream outFile("example.txt", ios::app); // ফাইল খোলা অ্যাপেন্ড মোডে
if (outFile.is_open()) {
outFile << "Adding new line to the file." << endl;
outFile.close(); // ফাইল বন্ধ করা
cout << "Data appended to file successfully." << endl;
} else {
cout << "Unable to open file for appending." << endl;
}
return 0;
}
বর্ণনা:
"example.txt"
ফাইলটি ios::app
মোডে খোলা হয়েছে, যা আগের ডেটা না মুছে শেষে নতুন ডেটা যোগ করে।"Adding new line to the file."
ফাইলে লেখা হয়েছে।ফাইল খোলা, পড়া বা লেখার সময় প্রোগ্রাম চলাকালে ফাইল ওপেন বা অপারেশন সফল হয়েছে কিনা তা যাচাই করা গুরুত্বপূর্ণ।
true
রিটার্ন করে।#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream inFile("example.txt");
if (!inFile.is_open()) {
cout << "Error opening file!" << endl;
return 1;
}
string word;
while (inFile >> word) {
cout << word << " ";
}
if (inFile.eof()) {
cout << "\nReached end of file." << endl;
}
inFile.close();
return 0;
}
বর্ণনা:
is_open()
চেক করা হয়েছে, যাতে ফাইল খোলার সমস্যার ক্ষেত্রে ব্যবহারকারীকে তা জানানো যায়।while (inFile >> word)
এর মাধ্যমে শব্দ ধরে ধরে পড়া হয়েছে।eof()
ব্যবহার করে তা নির্দেশ করা হয়েছে।ifstream
বা ofstream
ব্যবহার করে ফাইল খোলা যায়।<<
অপারেটর বা ofstream
ব্যবহার করে ফাইলে লেখা যায়।>>
অপারেটর বা getline()
ফাংশন ব্যবহার করে ফাইল থেকে পড়া যায়।ios::app
মোডে ফাইল খোলা হলে ডেটা ফাইলের শেষে যোগ হয়।ফাইল অপারেশনগুলো প্রোগ্রামিংয়ে তথ্য সংরক্ষণ এবং ডেটা ব্যবস্থাপনার ক্ষেত্রে অত্যন্ত কার্যকর। ফাইলের সাথে কাজ করার সময় ফাইল খোলা এবং বন্ধ করার বিষয়টি সঠিকভাবে নিশ্চিত করা প্রয়োজন।
ifstream, ofstream, এবং fstream হলো C++ এ ফাইল হ্যান্ডলিং করার জন্য ব্যবহৃত তিনটি প্রধান ক্লাস, যা fstream
লাইব্রেরির অংশ। এগুলোর সাহায্যে ফাইল থেকে ডেটা পড়া, ফাইলে ডেটা লেখা এবং একই সাথে ফাইল পড়া ও লেখা করা যায়।
ifstream
ক্লাস ব্যবহার করে ফাইল থেকে ডেটা পড়া হয়। এটি ইনপুট মোডে কাজ করে এবং শুধুমাত্র read
অপারেশন পরিচালনা করতে পারে।
ifstream
এর মাধ্যমে ফাইল থেকে পড়া#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream inputFile("example.txt"); // ফাইল খোলা ifstream অবজেক্ট দিয়ে
if (!inputFile) {
cout << "Error opening file!" << endl;
return 1;
}
string line;
while (getline(inputFile, line)) { // ফাইল থেকে এক লাইন করে পড়া
cout << line << endl;
}
inputFile.close(); // ফাইল বন্ধ করা
return 0;
}
বর্ণনা:
example.txt
ফাইলটি ifstream
অবজেক্ট inputFile
ব্যবহার করে খোলা হয়েছে।getline()
ফাংশনের মাধ্যমে এক লাইন করে পড়া হয়েছে এবং কনসোলে প্রিন্ট করা হয়েছে।close()
ফাংশন ব্যবহার করে ফাইলটি বন্ধ করা হয়েছে।ofstream
ক্লাস ব্যবহার করে ফাইলে ডেটা লেখা হয়। এটি আউটপুট মোডে কাজ করে এবং শুধুমাত্র write
অপারেশন পরিচালনা করতে পারে।
ofstream
এর মাধ্যমে ফাইলে লেখা#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream outputFile("example.txt"); // ফাইল খোলা ofstream অবজেক্ট দিয়ে
if (!outputFile) {
cout << "Error opening file!" << endl;
return 1;
}
outputFile << "Hello, World!" << endl; // ফাইলে লেখা
outputFile << "C++ File Handling Example." << endl;
outputFile.close(); // ফাইল বন্ধ করা
cout << "Data written to file successfully!" << endl;
return 0;
}
বর্ণনা:
example.txt
ফাইলটি ofstream
অবজেক্ট outputFile
ব্যবহার করে খোলা হয়েছে।outputFile
ব্যবহার করে ফাইলে কিছু টেক্সট লেখা হয়েছে।close()
ফাংশন ব্যবহার করে ফাইলটি বন্ধ করা হয়েছে।fstream
ক্লাস ব্যবহার করে একই ফাইলে ইনপুট এবং আউটপুট উভয় ধরনের অপারেশন করা যায়। এটি ইনপুট এবং আউটপুট উভয় মোডে কাজ করতে সক্ষম।
fstream
এর মাধ্যমে ফাইল পড়া ও লেখা#include <iostream>
#include <fstream>
using namespace std;
int main() {
fstream file("example.txt", ios::in | ios::out | ios::app); // ফাইল খোলা fstream অবজেক্ট দিয়ে, ইনপুট, আউটপুট এবং অ্যাপেন্ড মোডে
if (!file) {
cout << "Error opening file!" << endl;
return 1;
}
// ফাইলে লেখা
file << "Adding a new line to the file." << endl;
// ফাইলের শুরুতে যাওয়া
file.seekg(0);
// ফাইল থেকে পড়া
string line;
while (getline(file, line)) {
cout << line << endl;
}
file.close(); // ফাইল বন্ধ করা
return 0;
}
বর্ণনা:
example.txt
ফাইলটি fstream
অবজেক্ট file
ব্যবহার করে খোলা হয়েছে এবং এটি ইনপুট, আউটপুট এবং অ্যাপেন্ড মোডে কাজ করছে।seekg(0)
ব্যবহার করে ফাইল পয়েন্টারকে শুরুতে নিয়ে গিয়ে ফাইলের ডেটা পড়া হয়েছে।close()
ফাংশন ব্যবহার করে ফাইলটি বন্ধ করা হয়েছে।C++ এ ফাইল খোলার সময় বিভিন্ন মোড ব্যবহার করা যায়:
ios::out
এর জন্য ডিফল্ট।ক্লাস | কাজ | ব্যবহৃত মোড |
---|---|---|
ifstream | ফাইল থেকে পড়া (input) | ios::in |
ofstream | ফাইলে লেখা (output) | ios::out , ios::app , ios::trunc |
fstream | ফাইল পড়া এবং লেখা (input/output) | ios::in , ios::out , ios::app , ios::binary |
ফাইল হ্যান্ডলিংয়ের এই তিনটি ক্লাস ব্যবহার করে ফাইলের সাথে কার্যকরভাবে কাজ করা যায় এবং প্রোগ্রামের আউটপুট সংরক্ষণ বা ইনপুট হিসেবে ব্যবহার করা যায়।
বাইনারি ফাইল হ্যান্ডলিং C++ এ এমন একটি প্রক্রিয়া যেখানে ডেটা ফাইলের ভিতরে বাইনারি ফর্ম্যাটে সংরক্ষণ বা পড়া হয়। সাধারণত টেক্সট ফাইলের ক্ষেত্রে ডেটা মানব-পঠনযোগ্য থাকে, তবে বাইনারি ফাইলে ডেটা সংরক্ষণ করা হয় বাইনারি ফর্ম্যাটে, যা সরাসরি মেশিন-রিডেবল। এতে করে ফাইলের আকার কম হয় এবং পড়া/লেখার গতি বাড়ে।
C++ এ বাইনারি ফাইল হ্যান্ডলিং এর জন্য fstream
লাইব্রেরির ifstream
এবং ofstream
ক্লাস ব্যবহার করা হয়। ios::binary
মোডটি ব্যবহার করে ফাইল বাইনারি মোডে খোলা হয় এবং ডেটা লিখতে বা পড়তে write()
এবং read()
মেথড ব্যবহার করা হয়।
write() মেথড ব্যবহার করে ডেটা বাইনারি ফাইলে লেখা হয়। এর জন্য ডেটার ঠিকানা ও ডেটার সাইজ ইনপুট হিসেবে দিতে হয়।
#include <iostream>
#include <fstream>
using namespace std;
struct Person {
char name[20];
int age;
float height;
};
int main() {
Person person1 = {"John Doe", 30, 5.9};
// বাইনারি ফাইল খোলা এবং ডেটা লেখা
ofstream outFile("person.dat", ios::binary);
if (!outFile) {
cout << "Error opening file for writing." << endl;
return 1;
}
// স্ট্রাকচারের ডেটা বাইনারি ফাইলে লেখা
outFile.write(reinterpret_cast<char*>(&person1), sizeof(person1));
outFile.close();
cout << "Data written to binary file successfully." << endl;
return 0;
}
বর্ণনা:
Person
নামে একটি স্ট্রাকচার ডিফাইন করা হয়েছে, যা name
, age
, এবং height
নামে তিনটি ডেটা মেম্বার ধারণ করে।"person.dat"
নামে একটি বাইনারি ফাইল খোলা হয়েছে এবং write()
মেথড ব্যবহার করে person1
অবজেক্টের ডেটা লেখা হয়েছে।reinterpret_cast<char*>
ব্যবহার করে ডেটার ঠিকানা ক্যারেক্টার পয়েন্টারে রূপান্তর করা হয়েছে।read() মেথড ব্যবহার করে ডেটা বাইনারি ফাইল থেকে পড়া হয়। read()
মেথডেও ডেটার ঠিকানা এবং ডেটার সাইজ ইনপুট হিসেবে দিতে হয়।
#include <iostream>
#include <fstream>
using namespace std;
struct Person {
char name[20];
int age;
float height;
};
int main() {
Person person1;
// বাইনারি ফাইল খোলা এবং ডেটা পড়া
ifstream inFile("person.dat", ios::binary);
if (!inFile) {
cout << "Error opening file for reading." << endl;
return 1;
}
// স্ট্রাকচারের ডেটা পড়া
inFile.read(reinterpret_cast<char*>(&person1), sizeof(person1));
inFile.close();
// পড়া ডেটা প্রদর্শন করা
cout << "Name: " << person1.name << endl;
cout << "Age: " << person1.age << endl;
cout << "Height: " << person1.height << endl;
return 0;
}
বর্ণনা:
"person.dat"
ফাইলটি বাইনারি মোডে খোলা হয়েছে এবং read()
মেথড ব্যবহার করে person1
অবজেক্টে ডেটা পড়া হয়েছে।person1
অবজেক্টে সংরক্ষিত হয়েছে এবং পরে cout
দিয়ে প্রদর্শন করা হয়েছে।বাইনারি ফাইলে একাধিক রেকর্ড সংরক্ষণ এবং পড়ার জন্য একটি লুপ ব্যবহার করা হয়। প্রতিটি রেকর্ডের জন্য write()
এবং read()
মেথড কল করা হয়।
#include <iostream>
#include <fstream>
using namespace std;
struct Person {
char name[20];
int age;
float height;
};
int main() {
Person persons[2] = { {"Alice", 28, 5.5}, {"Bob", 32, 5.8} };
// বাইনারি ফাইল খোলা এবং একাধিক রেকর্ড লেখা
ofstream outFile("persons.dat", ios::binary);
if (!outFile) {
cout << "Error opening file for writing." << endl;
return 1;
}
for (int i = 0; i < 2; i++) {
outFile.write(reinterpret_cast<char*>(&persons[i]), sizeof(persons[i]));
}
outFile.close();
cout << "Multiple records written to binary file successfully." << endl;
return 0;
}
#include <iostream>
#include <fstream>
using namespace std;
struct Person {
char name[20];
int age;
float height;
};
int main() {
Person persons[2];
// বাইনারি ফাইল খোলা এবং একাধিক রেকর্ড পড়া
ifstream inFile("persons.dat", ios::binary);
if (!inFile) {
cout << "Error opening file for reading." << endl;
return 1;
}
for (int i = 0; i < 2; i++) {
inFile.read(reinterpret_cast<char*>(&persons[i]), sizeof(persons[i]));
}
inFile.close();
// পড়া ডেটা প্রদর্শন করা
for (int i = 0; i < 2; i++) {
cout << "Name: " << persons[i].name << ", Age: " << persons[i].age << ", Height: " << persons[i].height << endl;
}
return 0;
}
write(): ফাইলে বাইনারি ডেটা লেখা হয়।
outFile.write(reinterpret_cast<char*>(&data), sizeof(data));
read(): বাইনারি ফাইল থেকে ডেটা পড়া হয়।
inFile.read(reinterpret_cast<char*>(&data), sizeof(data));
write()
মেথড ব্যবহার করে ডেটা ফাইলে লেখা হয়।read()
মেথড ব্যবহার করে ডেটা ফাইল থেকে পড়া হয়।বাইনারি ফাইল হ্যান্ডলিং ব্যবহারে ডেটা দ্রুত এবং নিরাপদে সংরক্ষণ এবং পরিচালনা করা যায়।
common.read_more